package polymorphic05;

/**
 * 方案一:我们通过定义两个feed重载方法,来达到饲养猫和鸟的目的
 *       如果将来再来100种动物,我们要想饲养着100种动物
 *       还需在定义100个feed方法,这样的话代码复用性很低
 * 方案二:
 */

public class Person {
  /*  //人饲养猫                 //Cat c= cat =new Cat();
    public void feed(Cat c) {//Cat c = new Cat();
        c.eat();
        c.catchMouse();
    }
   //人饲养鸟
    public void feed(Bird b) {//Bird b = new Bird();
        b.eat();
        b.fly();
    }*/
    //可以饲养所有动物
    public void feed(Animal a) {//Animal a= new Cat(); 多态原理
                               //Animal a=new Bird();.....其他动物也行
        a.eat();//我们通过多态调用子类共有行为,可以提高代码复用性
       /* a.catchMouse();
        a.fly();*/

      /* Cat c=(Cat)a;//把猫重新回归本色,原来扮演动物角色,现在扮演猫角色
                    //当传入new Cat(),相当于Cat c=new Cat();
                    //java.lang.ClassCastException(强制类型转换异常)
                     //当传入new Bird(),Cat c=(Cat)new Bird();//由于猫和鸟是平级的两个事物,所以不能强转
       c.catchMouse();*/

        if (a instanceof Cat) {//当传入new Cat() 检测 Cat temp= new Cat(); 运算符结果为true
            Cat c = (Cat) a;  //当传入new Bird() 检测 Cat temp= new Bird(); 运算符结果为false
             c.catchMouse();
        } else if (a instanceof Bird) {
            Bird b = (Bird) a;
            b.fly();
        }

    }
}
